package basedados.entidades;

import interfaces.IObj;
import interfaces.IPreencherJTable;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import basedados.arquivos_texto.TxtIObj;
import apoio.Tipos;
import apoio.Tipos.Tipo;

/**
 * Entidade que representa um item de Historico de Confiabilidade
 * @author Emerson Shigueo Sugimoto
 * */
public class HistoricoConfiabilidade implements IObj, IPreencherJTable {
	private int _codigo;
	private Tipo _tipoEmpresa;
	private String _nomeEmpresa;
	private int _idProduto;
	private String _nomeProduto;
	private String _hora;

	@Override
	public void setCodigo(int cod) { _codigo = cod; }
	@Override
	public int getCodigo() { return _codigo; }
	
	public void setTipoEmpresa(Tipo tipoProduto) { this._tipoEmpresa = tipoProduto; }
	public Tipo getTipoEmpresa() { return _tipoEmpresa; }
	public void setNomeEmpresa(String nome) { this._nomeEmpresa = nome; }
	public String getNomeEmpresa() { return _nomeEmpresa; }
	public void setIdProduto(int idProduto) { this._idProduto = idProduto; }
	public int getIdProduto() { return _idProduto; }
	public void setNomeProduto(String nomeProduto) {this._nomeProduto = nomeProduto;}
	public String getNomeProduto() {return _nomeProduto;}
	public void setHora(String hora) {this._hora = hora;}
	public String getHora() {return _hora;}
	
	public HistoricoConfiabilidade(){
		setCodigo(0);
		setTipoEmpresa(Tipo.papelaria);
		setNomeEmpresa("");
		setNomeProduto("");
		setIdProduto(0);
		setHora(new SimpleDateFormat("HH:mm").format(new java.util.Date()));
	}
	public HistoricoConfiabilidade(int codigo, Tipo tipo, String nome, String nomeProduto, int idProduto, String hora){
		setCodigo(codigo);
		setTipoEmpresa(tipo);
		setNomeEmpresa(nome);
		setNomeProduto(nomeProduto);
		setIdProduto(idProduto);
		setHora(hora);
	}
	
	/**
	 * @idEmpresa id da empresa
	 * @return Total de Falhas de uma empresa a partir do id da Empresa
	 * */
	public int getTotalFalhas(int idEmpresa){
		TxtIObj tx = new TxtIObj(getInstance());
		IObj[] v = tx.getIObjs();
		
		int totalFalhas = 0;
		for (int i = 0; i < v.length; i++) {
			if (v[i].getCodigo() == Integer.valueOf(idEmpresa)) {
				totalFalhas++;
			}
		}
		return totalFalhas;
	}
	
	/**
	 * @nomeEmpresa nome da empresa
	 * @return Total de Falhas de uma empresa a partir do nome da Empresa
	 * */
	public int getTotalFalhasNomeEmpresa(String nomeEmpresa){
		TxtIObj tx = new TxtIObj(getInstance());
		IObj[] v = tx.getIObjs();
		
		//System.out.println("[getTotalFalhasNomeEmpresa] nomeEmpresa: " + nomeEmpresa);
		
		int totalFalhas = 0;
		for (int i = 0; i < v.length; i++) {
			HistoricoConfiabilidade hc = (HistoricoConfiabilidade)v[i];
			if (hc.getNomeEmpresa().equals(nomeEmpresa)) {
				totalFalhas++;
			}
		}
		
		//System.out.println("[getTotalFalhasNomeEmpresa] totalFalhas: " + totalFalhas);
		
		return totalFalhas;
	}
	
	/**
	 * @return String[] dos dados da classe
	 * */
	@Override
	public String[] getDados() {
		String[] d = new String[6];
		d[0] = String.valueOf(getCodigo());
		d[1] = String.valueOf(Tipos.TipoInt(getTipoEmpresa()));
		d[2] = getNomeEmpresa();
		d[3] = String.valueOf(getIdProduto());
		d[4] = getNomeProduto();
		d[5] = getHora();
		return d;
	}
	/**
	 * preenche a classe a partir de um String[]
	 * */
	@Override
	public void setDados(String[] dados) {
		if (dados.length < 6) return;
		setCodigo(Integer.valueOf(dados[0]));
		setTipoEmpresa(Tipos.IntTipo(Integer.valueOf(dados[1])));
		setNomeEmpresa(dados[2]);
		setIdProduto(Integer.valueOf(dados[3]));
		setNomeProduto(dados[4]);
		setHora(dados[5]);
	}
	
	/**
	 * @return a instancia de um objeto deste tipo de classe
	 * */
	@Override
	public IObj getInstance() {
		return new HistoricoConfiabilidade();
	}
	
	/**
	 * @return pasta e arquivo com base no TipoProduto
	 * */
	@Override
	public String getPastaeArquivo() {
		String nome_arquivo = "historico_confiabilidade";
		return "bd_2/historico/"+nome_arquivo+".txt";
	}
	
	/**
	 * sobrecarga toString()
	 * */
	@Override
	public String toString() {
		String rt = "";
		String[] str = getDados(); if (str==null||str.length<=0){return rt;}
		for (int i = 0; i< str.length; i++){
			rt += str[i];
			if (i < str.length-1) rt += ",";
		}
		return rt;
	}
	//------------------------- JTable --------------------------
	/**
	 * @return Retorna os titulos do JTable
	 * */
	@Override
	public String[] getTitulosJTable() {
		return new String[] {"Codigo", "Tipo", "Nome", "IdProduto", "Nome Produto", "Hora"};
	}
	
	/**
	 * @return Retorna os dados para o JTable
	 * */
	@Override
	public List<String[]> getDadosJTable() {
		List<String[]> rt = new ArrayList<String[]>();
		IObj[] prods = new TxtIObj(getInstance()).getIObjs();
		for (int i = 0; i < prods.length; i++) { rt.add(prods[i].getDados()); }
		return rt;
	}

}
